Skip to content

Allow configuring cascade deletion in DABs - #5846

Merged
andrewnester merged 16 commits into
databricks:mainfrom
ronaldz-db:pipelines-destroy-cascade
Aug 11, 2026
Merged

andrewnester merged 16 commits into
databricks:mainfrom
ronaldz-db:pipelines-destroy-cascade

Conversation

@ronaldz-db

@ronaldz-db ronaldz-db commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Changes

Add a cascade_on_destory field to the pipeline bundle resource that controls whether destroying a pipeline also cascades to its datasets. When unset, we maintain the existing default of true.

This change applies to the direct engine. We have a separate change on the Terraform side: databricks/terraform-provider-databricks#5860

Why

Previously, pipeline deletion would automatically cascade to its tables. After user feedback, we decided to make this configurable in the DeletePipeline API. This extends support to DABs as well, which was another common user ask.

Tests

Unit tests

Add a `cascade` field to the pipeline bundle resource that controls whether
destroying a pipeline also deletes its datasets (materialized views, streaming
tables, and views). When unset, the server default applies (cascade); set
`cascade: false` to retain the datasets on destroy.

The field is delete-time only: it is not part of the pipeline spec, so it is
never sent on create/update. The direct engine persists it in state (via a
PipelineState wrapper around CreatePipeline, mirroring the sql_warehouse
lifecycle pattern) and reads it at delete time, force-sending cascade so an
explicit false survives query-string omitempty (honored for query params as of
databricks-sdk-go v0.152.0). A cascade-only change is a state-only update with
no pipeline API call. cascade is classified input_only so it does not show
remote drift.

The terraform engine drops the field for now: the pinned provider has no such
attribute yet (pending terraform-provider-databricks#5860), so terraform-engine
support is a follow-up.

Co-authored-by: Isaac
Comment thread bundle/direct/dresources/pipeline.go
Comment thread acceptance/pipelines/destroy/destroy-pipeline-cascade/databricks.yml Outdated
Comment thread acceptance/pipelines/destroy/destroy-pipeline-cascade/output.txt
pipelines:
my_pipeline:
name: test-pipeline-cascade
cascade: false

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you make sure the default template also sets purge_on_destroy: false? With a very short comment to the side explaining it? Could be a separate PR.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ack will put this change in a follow-up PR.

Comment thread acceptance/pipelines/destroy/destroy-pipeline-cascade/test.toml Outdated
… message fix

- Rename the pipeline config field cascade -> cascade_on_destroy, matching the
  Lakebase purge_on_delete precedent (per review discussion).
- Add ValidateCascadeOnDestroy mutator: hard error when the field is used with
  the terraform engine, which does not support it yet.
- Fix the destroy approval message so a pipeline with cascade_on_destroy: false
  is not described as deleting its STs/MVs, and mention the property otherwise.
- Comment why ForceSendFields is needed in DoDelete.
- Regenerate schema, refschema, and affected acceptance outputs.

Co-authored-by: Isaac
Comment thread acceptance/pipelines/destroy/destroy-pipeline-cascade/output.txt
Comment thread bundle/phases/destroy.go
Comment thread acceptance/pipelines/destroy/destroy-pipeline-cascade/databricks.yml Outdated
pipelines:
my_pipeline:
name: test-pipeline-cascade
cascade: false

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ack will put this change in a follow-up PR.

ronaldz-db added a commit to ronaldz-db/terraform-provider-databricks that referenced this pull request Jul 15, 2026
Align the pipeline destroy-time attribute name with the DABs config field
(databricks/cli#5846), which settled on cascade_on_destroy.

Co-authored-by: Isaac
Comment thread .vscode/settings.json Outdated
Comment thread bundle/config/resources/pipeline.go

This action will result in the deletion of the following Lakeflow Spark Declarative Pipelines along with the
Streaming Tables (STs) and Materialized Views (MVs) managed by them:
Streaming Tables (STs) and Materialized Views (MVs) managed by them. Set 'cascade_on_destroy: false' on a pipeline to retain datasets on pipeline deletion:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Streaming Tables (STs) and Materialized Views (MVs) managed by them. Set 'cascade_on_destroy: false' on a pipeline to retain datasets on pipeline deletion:
Streaming Tables (STs) and Materialized Views (MVs) managed by them. Set 'cascade_on_destroy: false' on a pipeline to retain the Streaming Tables and Materialized Views on pipeline deletion:

datasets seems like a vague term to use here? In the context of dashboards, for example, this just means a SQL query.

I could be wrong about this, so if this is standard for pipelines, feel free to keep it as is.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We generally use datasets in pipelines docs now, since pipeline-owned tables have been changing recently. Now, we also allow users to create Views in pipelines. In the near future, we plan to switch to creating regular delta tables as well.

Comment thread bundle/direct/dresources/pipeline.go Outdated
type PipelineRemote struct {
pipelines.CreatePipeline

CascadeOnDestroy *bool `json:"cascade_on_destroy,omitempty"`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can be omitted from this struct because cascade on destroy will never be set in the remote. It'll never be returned as part of the get response

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah I was confused and thought that there was a strict requirement that PipelineRemote be a superset. But looking closer, I don't think there a benefit to defining for the remote version. Dropped it

Comment thread bundle/direct/dresources/pipeline.go
Comment thread bundle/direct/dresources/pipeline.go Outdated
Comment thread bundle/phases/messages.go
deletePipelineWithCascadeMessage = `This action will result in the deletion of the following Lakeflow Spark Declarative Pipelines along with the
Streaming Tables (STs) and Materialized Views (MVs) managed by them. Set 'cascade_on_destroy: false' on a pipeline to retain datasets on pipeline deletion:`

deletePipelineNoCascadeMessage = `This action will result in the deletion of the following Lakeflow Spark Declarative Pipelines.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

Comment thread bundle/phases/plan.go Outdated
Drop the files.watcherExclude block that was unrelated to the
cascade_on_destroy feature, per review feedback.

Co-authored-by: Isaac
- Add docs URL to the terraform-engine validation error so users can
  learn about direct deployment mode.
- Omit CascadeOnDestroy from PipelineRemote: it is an input-only,
  delete-time setting the GET response never returns, so drift is
  suppressed automatically (missing_in_remote). Matches the postgres
  input-only field pattern.
- Propagate errors from pipelineDeletionCascades instead of silently
  defaulting, and add unit coverage.

Co-authored-by: Isaac
Comment thread bundle/phases/plan.go

v, err := dyn.GetByPath(b.Config.Value(), path)
if err != nil {
return true, nil

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This embeds a client side default here. Treating unset as true. Won't this get out of date once the server side default changes?

@shreyas-goenka shreyas-goenka Jul 16, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess there's no good way to handle this scenario? It does mean we'll eventually end up showing wrong messages to people.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a to-do message here to change the value once the server side default flips?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, added a note here. Unfortunately, there may be a brief period where the DABs default and server-side default are different. But the DABs documentation describes the actual encoded behavior, so we won't be showing the wrong messages

Comment thread bundle/phases/plan.go

v, err := dyn.GetByPath(b.Config.Value(), path)
if err != nil {
return true, nil

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a to-do message here to change the value once the server side default flips?

Comment thread bundle/phases/messages.go
Comment thread bundle/direct/dresources/pipeline.go
pipelines:
my_pipeline:
name: test-pipeline-cascade
cascade_on_destroy: false

@shreyas-goenka shreyas-goenka Jul 21, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please add a test where we start we set cascade on destroy to false, we do a deployment, and then we unset this value, deploy again, and then destroy. I suspect that if we unset this That does not take hold and we continue to use false as the value for the bundle deployment. This was flagged by GPT during a code review:

 > Unsetting cascade_on_destroy does not persist the new state. For false → unset, the planner detects the local diff (Old=false, New=nil), but because the remote omits this field, Remote=nil. Change
  > classification therefore marks it skip: remote_already_set, and skipped resources do not save their new state. A later destroy still reads false from persisted state and sends cascade=false instead of
  > using the server default.
  >
  > Could we force local changes to this client-only field to produce a state-only Update—perhaps through OverrideChangeDesc—and add regression coverage for: deploy with false → remove field → deploy →
  > destroy?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The recommendation of adding override change desk here sounds like a reasonable solution to me:

The closest prior art is Lakebase’s purge_on_delete in /tmp/isaac-review-cli/bundle/direct/dresources/postgres_project.go:148:

  - It is absent remotely.
  - DoUpdate removes it from the API update mask.
  - The framework still saves state when the resource action is Update.

  However, purge_on_delete is a plain bool; unset and false have identical behavior. Its acceptance test even shows that removing the explicit false leaves false persisted. That is harmless there, but not
  for cascade_on_destroy, where unset means the server default (true) and therefore differs from false.

  The intended generic behavior is documented by ReasonMissingInRemote: suppress remote absence only “when there is no local change.” The current classifier violates that for false → nil because earlier
  remote_already_set/allEmpty checks win.

  Two fixes:

  - Minimal: add ResourcePipeline.OverrideChangeDesc that forces cascade_on_destroy to Update whenever Old != New. DoUpdate already makes this state-only.
  - General: change classification so locally changed fields absent from RemoteType bypass both remote_already_set and allEmpty. This is cleaner but affects all input-only fields and needs broader tests.

  For this PR, I’d recommend the resource-specific override plus the regression test.

WDYT @denik

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you'll need a snippet like:

func (*ResourcePipeline) OverrideChangeDesc(
      _ context.Context,
      path *structpath.PathNode,
      change *ChangeDesc,
      _ *PipelineRemote,
  ) error {
      if path.String() == "cascade_on_destroy" &&
          !structdiff.IsEqual(change.Old, change.New) {
          change.Action = deployplan.Update
          change.Reason = deployplan.ReasonCustom
      }
      return nil
  }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh interesting, thanks for the guidance. Added the override and additional test cases

@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 015b52e

Run: 31181804413

Env 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip Time
💚​ aws linux 4 4 337 1104 11:53
💚​ aws windows 4 4 327 1106 13:06
💚​ azure linux 4 4 336 1104 11:42
💚​ azure windows 4 4 326 1106 13:42
💚​ gcp linux 1 5 337 1104 12:57
💚​ gcp windows 1 5 327 1106 14:29
8 interesting tests: 4 RECOVERED, 4 SKIP
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
💚​ TestAccept 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
🙈​ TestAccept/bundle/invariant/no_drift 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/vector_search_endpoints/drift/recreated_same_name 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/vector_search_indexes/recreate/embedding_dimension 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/ssh/connection 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
💚​ TestFetchRepositoryInfoAPI_FromRepo 💚​R 💚​R 💚​R 💚​R 🙈​S 🙈​S
💚​ TestFetchRepositoryInfoAPI_FromRepo/root 💚​R 💚​R 💚​R 💚​R
💚​ TestFetchRepositoryInfoAPI_FromRepo/subdir 💚​R 💚​R 💚​R 💚​R
Top 43 slowest tests (at least 2 minutes):
duration env testname
4:06 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.11
3:37 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.10
3:20 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.13
3:18 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.13
3:15 azure windows TestAccept
3:12 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.9
3:06 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.12
3:05 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.11
3:00 gcp windows TestAccept
2:58 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.12
2:55 aws windows TestAccept
2:54 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.9
2:50 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.9
2:46 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.11
2:42 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.9
2:40 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.13
2:37 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.13
2:36 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.10
2:32 azure linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.13
2:30 aws linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.10
2:28 gcp linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.10
2:26 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.13
2:25 gcp linux TestAccept/bundle/resources/schemas/auto-approve/DATABRICKS_BUNDLE_ENGINE=terraform
2:21 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.11
2:21 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.10
2:20 azure linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.10
2:19 azure linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.12
2:19 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.12
2:13 gcp linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.9
2:13 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.10
2:12 aws linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.11
2:12 azure linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.11
2:12 gcp linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.9
2:10 gcp linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.10
2:10 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.12
2:07 aws linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.12
2:06 gcp windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.12
2:06 azure linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.13
2:05 azure linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.11
2:03 azure linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.12
2:01 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.11
2:00 aws windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.10
2:00 aws linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.11

Comment thread acceptance/bundle/refschema/out.fields.txt Outdated
cascade_on_destroy is absent from PipelineRemote (it is a delete-time-only,
input-only field the GET never returns), so refschema should tag it INPUT+STATE,
not ALL. Regenerate the golden to reflect the removal from the remote type.

Co-authored-by: Isaac
// Remote value is always nil. We add this override to force a state-only update.
func (*ResourcePipeline) OverrideChangeDesc(_ context.Context, path *structpath.PathNode, change *ChangeDesc, _ *PipelineRemote) error {
if path.String() == "cascade_on_destroy" && !structdiff.IsEqual(change.Old, change.New) {
change.Action = deployplan.Update

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is already the default behaviour, why do we need to encode it here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This block is the problem:

        if structdiff.IsEqual(ch.Remote, ch.New) {
			ch.Action = deployplan.Skip
			ch.Reason = deployplan.ReasonRemoteAlreadySet
		} 

Since this field is not in the remote, unsetting the field previously set to false will result in old=false, new=nil, Remote=nil, which falls into the structdiff.IsEqual(ch.Remote, ch.New) case and results in deployplan.Skip. The state version will not be updated due ot this.

Adjusting resources.yml categories doesn't help since the structdiff.IsEqual(ch.Remote, ch.New) check runs first and short-circuits before we consider anything else.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see. this is a bug in the planner, we should not trigger this block for your field because it's not even in remote. I'll think about this fix but for now we can proceed with your workaround.

Could you add your comment to OverrideChangeDesc impl?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 updated the comment with more details

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm making a change that fixes remote_already_set guard: #6112

With it, you should not need OverrideChangeDesc, could you try rebasing on top of that and removing it?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there is still a problem here, where allEmpty incorrectly treats boolean fields with value "false" as empty.

I will keep in the OverrideChangeDesc for now to close out this PR

Explain why the override is needed: unsetting the field yields
old=false/new=nil/remote=nil, which the classifier's IsEqual(remote,new)
check skips as remote_already_set even though the field is absent from
the remote, so state is never re-saved.

Co-authored-by: Isaac
… in dabs map

The classifier's allEmpty branch treats a false boolean as empty, so a
false<->nil cascade_on_destroy edit is skipped and never persists to state.
Reword the OverrideChangeDesc comment to describe that mechanism instead of
the pre-databricks#6112 "remote already set" framing. Regenerate the terraform<->dabs
field map to register cascade_on_destroy as a dabs-only pipeline field.

Co-authored-by: Isaac
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

An authorized user can trigger integration tests manually by following the instructions below:

Trigger:
go/deco-tests-run/cli

Inputs:

  • PR number: 5846
  • Commit SHA: 015b52eead6c5bf890176746be9ba58a8eb5bc22

Checks will be approved automatically on success.

@andrewnester
andrewnester merged commit 90fe615 into databricks:main Aug 11, 2026
23 of 45 checks passed
radakam added a commit that referenced this pull request Aug 11, 2026
## Summary
Regen leftovers from #5846 that keep `main` red:
- `validate-generated`: add `cascade_on_destroy` to the PyDABs pipeline
model
- `task test`: refresh `config-remote-sync/split/positional`
destroy-prompt golden
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 90fe615

Run: 31490798274

Env ❌​FAIL 🤯​MISS 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip Time
❌​ aws linux 17 172 5 2 978 934 354:56
❌​ aws windows 18 137 5 2 951 953 347:07
❌​ azure linux 5 98 5 2 958 971 354:59
❌​ azure windows 9 85 5 2 906 990 343:30
❌​ gcp linux 13 138 2 3 900 975 355:41
❌​ gcp windows 30 98 1 3 863 994 347:14
552 interesting tests: 475 MISS, 71 FAIL, 4 RECOVERED, 2 SKIP
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
🤯​ TestAccept 🤯​M 🤯​M 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/config_edits ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_fields ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/multiple_files ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/output_json ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_basic ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_multiple ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/target_override ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert ✅​p 🙈​s 🤯​M 🙈​s ✅​p 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p
🤯​ TestAccept/bundle/deploy/empty-bundle ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/mlops-stacks ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/snapshot-comparison ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/snapshot-comparison/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/spark-jar-task ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/alert ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/catalog ✅​p 🤯​M 🤯​M ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/catalog/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M 🤯​M ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/cluster ✅​p ✅​p 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=direct ✅​p ✅​p 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct/READPLAN= ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct/READPLAN=1 ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=terraform/READPLAN= ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct/READPLAN= ✅​p 🤯​M 🤯​M 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct/READPLAN=1 ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=terraform/READPLAN= ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/experiment ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
❌​ TestAccept/bundle/deployment/bind/pipelines/recreate ✅​p 🤯​M ❌​F ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=direct ✅​p 🤯​M ✅​p ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p 🤯​M ❌​F ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/generate/pipeline_and_deploy ✅​p ❌​F ✅​p ✅​p ✅​p ✅​p
❌​ TestAccept/bundle/generate/pipeline_and_deploy/DATABRICKS_BUNDLE_ENGINE=direct ✅​p ❌​F ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=app.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=catalog.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=catalog.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=experiment.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=experiment.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job.yml.tmpl/READPLAN= ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_for_each_task.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_for_each_task.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_job_cluster.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_job_cluster.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_task_cluster.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_task_cluster.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_permission_ref.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_permission_ref.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_run.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_run.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_with_depends_on.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_with_depends_on.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_with_task.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_with_task.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model_serving_endpoint.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model_serving_endpoint.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model_with_permissions.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model_with_permissions.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline_allow_duplicate_names.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p ✅​p ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline_allow_duplicate_names.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline_apply_policy_default_values.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline_apply_policy_default_values.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline_config_dots.yml.tmpl/READPLAN= ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline_config_dots.yml.tmpl/READPLAN=1 ✅​p 🤯​M ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=registered_model.yml.tmpl/READPLAN= ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=registered_model.yml.tmpl/READPLAN=1 ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema.yml.tmpl/READPLAN= ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema.yml.tmpl/READPLAN=1 ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_empty_grants.yml.tmpl/READPLAN= ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_empty_grants.yml.tmpl/READPLAN=1 ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_grant_ref.yml.tmpl/READPLAN= ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_grant_ref.yml.tmpl/READPLAN=1 ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_uppercase_name.yml.tmpl/READPLAN= ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
🤯​ TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_uppercase_name.yml.tmpl/READPLAN=1 ✅​p ✅​p ✅​p 🤯​M ✅​p ✅​p
Top 50 slowest tests (at least 2 minutes):
duration env testname
14:55 gcp linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
13:34 gcp linux TestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=terraform
12:44 gcp windows TestAccept/bundle/resources/apps/lifecycle-started-omitted/DATABRICKS_BUNDLE_ENGINE=direct
12:06 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
11:44 azure linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
11:22 gcp windows TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
10:45 gcp windows TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=yes/NBOOK=yes/PY=yes/READPLAN=
10:45 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct
10:07 aws linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
9:39 gcp windows TestAccept/bundle/resources/models/basic/DATABRICKS_BUNDLE_ENGINE=terraform
9:17 gcp windows TestAccept/bundle/templates/default-python/combinations/classic/DATABRICKS_BUNDLE_ENGINE=direct/DLT=no/NBOOK=no/PY=no/READPLAN=
9:14 azure windows TestAccept/bundle/resources/apps/lifecycle-started-omitted/DATABRICKS_BUNDLE_ENGINE=direct
9:08 gcp linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform
9:02 gcp windows TestAccept/bundle/resources/models/basic/DATABRICKS_BUNDLE_ENGINE=direct
9:02 aws linux TestAccept/bundle/templates/default-python/combinations/classic/DATABRICKS_BUNDLE_ENGINE=direct/DLT=no/NBOOK=yes/PY=no/READPLAN=1
9:01 gcp linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
8:53 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct
8:48 aws linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform
8:48 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_grant_ref.yml.tmpl/READPLAN=1
8:44 aws linux TestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=direct
8:41 gcp linux TestAccept/bundle/templates/default-python/combinations/classic/DATABRICKS_BUNDLE_ENGINE=direct/DLT=no/NBOOK=no/PY=no/READPLAN=1
8:37 azure linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct
8:28 azure windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
8:26 gcp windows TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct
8:19 aws windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
8:16 aws linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.12
8:13 aws linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
8:12 azure windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN=
8:09 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=1
8:01 gcp linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
8:01 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
7:58 aws windows TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=yes/NBOOK=no/PY=no/READPLAN=
7:56 aws windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema.yml.tmpl/READPLAN=1
7:50 azure linux TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=catalog.yml.tmpl
7:48 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_with_task.yml.tmpl/READPLAN=1
7:48 gcp linux TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
7:47 aws linux TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=direct/DLT=no/NBOOK=yes/PY=yes/READPLAN=
7:45 gcp linux TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=no/NBOOK=no/PY=yes/READPLAN=
7:45 gcp linux TestAccept/bundle/resources/apps/lifecycle-started-omitted/DATABRICKS_BUNDLE_ENGINE=direct
7:41 azure linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
7:41 gcp linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_job_cluster.yml.tmpl/READPLAN=1
7:34 aws windows TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct
7:34 gcp linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=app.yml.tmpl/READPLAN=1
7:33 aws linux TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct/UV_PYTHON=3.9
7:32 aws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN=1
7:32 aws linux TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=yes/NBOOK=no/PY=yes/READPLAN=
7:32 gcp windows TestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=terraform
7:30 gcp linux TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct
7:28 aws windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=secret_scope_default_backend_type.yml.tmpl/READPLAN=1
7:25 azure windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
(376 table rows omitted to keep the report under 60000 bytes)

yolocs pushed a commit to yolocs/dbcli that referenced this pull request Aug 11, 2026
…cks#6232)

## Summary
Drop stale `Local = true` left by databricks#5846 after databricks#6196 removed the field
from `TestConfig`. Unblocks `task test-pipelines` on main.
deco-sdk-tagging Bot added a commit that referenced this pull request Aug 12, 2026
## Release v1.12.0

### CLI

 * `databricks aitools install` now supports Gemini CLI, installing Databricks agent skills into its skills directory.
 * `databricks aitools install` now supports Pi, installing Databricks agent skills into its skills directory.
 * A locally built CLI (`go build`, without release flags) now reports the next release version with a `-dev` prerelease, e.g. `1.12.0-dev+abcdef123456`, instead of `0.0.0-dev+abcdef123456`. The old string sorted below every published release even though a local build is newer than the latest release; the new one sorts above the latest release and below the release it will become, matching what goreleaser already produces for snapshot builds.
 * Added the `databricks environments setup-local` command, which provisions (or updates) a local Python environment matched to a Databricks compute target. It resolves the target to an environment key, fetches the pinned Python version, databricks-connect version, and dependency constraints published for that key, then provisions a matched `.venv` with uv.

### Bundles

 * Added a `cascade_on_destroy` field to the pipeline resource to control whether destroying a pipeline also deletes its datasets (MVs, STs, Views). When unset, the server default applies; set `cascade_on_destroy: false` to retain the datasets on destroy. Supported with the direct deployment engine ([#5846](#5846)).
 * Fix `bundle.deployment.lock.force` being ignored. The `--force-lock` flag's default value overwrote the value configured in `databricks.yml`, so setting the field had no effect and a stale deployment lock could only be overridden with the flag. ([#6188](#6188))
 * direct: experimental `job_runs` now sends a CLI-managed idempotency token on every run-now, so an SDK retry after a lost response returns the same run. Configured `idempotency_token` values are rejected.
 * direct: the experimental `job_runs` resource now waits for the triggered run to finish, so other resources can reference its outcome (e.g. `${resources.job_runs.nightly.state.result_state}`). A run that does not succeed fails the deploy, naming the failed task, and is run again on the next deploy. If a deploy is interrupted while waiting, the next one resumes waiting on the same run.
 * direct: Fixed model serving `telemetry_config` drift and applied planned telemetry updates. Unsupported endpoint types now fail when telemetry is applied; create may still succeed because it drops the field ([#6106](#6106)).
 * The `cli_version` field in the direct engine's deployment state (`resources.json`) now records the CLI version that last wrote the state. Previously it kept the version of the CLI that first created the state.
 * Add support for UC secrets resource ([#5861](#5861))

### Dependency Updates

 * Bump `github.com/databricks/databricks-sdk-go` from v0.166.0 to v0.169.0.
 * Bump Terraform provider from v1.124.0 to v1.126.0 ([#6250](#6250)).
janniklasrose pushed a commit that referenced this pull request Sep 15, 2026
## Release v1.12.0

### CLI

 * `databricks aitools install` now supports Gemini CLI, installing Databricks agent skills into its skills directory.
 * `databricks aitools install` now supports Pi, installing Databricks agent skills into its skills directory.
 * A locally built CLI (`go build`, without release flags) now reports the next release version with a `-dev` prerelease, e.g. `1.12.0-dev+abcdef123456`, instead of `0.0.0-dev+abcdef123456`. The old string sorted below every published release even though a local build is newer than the latest release; the new one sorts above the latest release and below the release it will become, matching what goreleaser already produces for snapshot builds.
 * Added the `databricks environments setup-local` command, which provisions (or updates) a local Python environment matched to a Databricks compute target. It resolves the target to an environment key, fetches the pinned Python version, databricks-connect version, and dependency constraints published for that key, then provisions a matched `.venv` with uv.

### Bundles

 * Added a `cascade_on_destroy` field to the pipeline resource to control whether destroying a pipeline also deletes its datasets (MVs, STs, Views). When unset, the server default applies; set `cascade_on_destroy: false` to retain the datasets on destroy. Supported with the direct deployment engine ([#5846](#5846)).
 * Fix `bundle.deployment.lock.force` being ignored. The `--force-lock` flag's default value overwrote the value configured in `databricks.yml`, so setting the field had no effect and a stale deployment lock could only be overridden with the flag. ([#6188](#6188))
 * direct: experimental `job_runs` now sends a CLI-managed idempotency token on every run-now, so an SDK retry after a lost response returns the same run. Configured `idempotency_token` values are rejected.
 * direct: the experimental `job_runs` resource now waits for the triggered run to finish, so other resources can reference its outcome (e.g. `${resources.job_runs.nightly.state.result_state}`). A run that does not succeed fails the deploy, naming the failed task, and is run again on the next deploy. If a deploy is interrupted while waiting, the next one resumes waiting on the same run.
 * direct: Fixed model serving `telemetry_config` drift and applied planned telemetry updates. Unsupported endpoint types now fail when telemetry is applied; create may still succeed because it drops the field ([#6106](#6106)).
 * The `cli_version` field in the direct engine's deployment state (`resources.json`) now records the CLI version that last wrote the state. Previously it kept the version of the CLI that first created the state.
 * Add support for UC secrets resource ([#5861](#5861))

### Dependency Updates

 * Bump `github.com/databricks/databricks-sdk-go` from v0.166.0 to v0.169.0.
 * Bump Terraform provider from v1.124.0 to v1.126.0 ([#6250](#6250)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enable cascade delete feature on pipeline for databricks deploy

6 participants